package com.zhanghe.study.study_scala.fun

/**
 * 参数类型推断
 *
 * @author zh
 * @date 2021/5/9 19:21
 */
object TestParamTypeInfer {
  def main(args: Array[String]): Unit = {
    val list = List(1, 2, 3, 4)

    def addOne(x: Int) = {
      x + 1
    }

    // 正常调用函数
    //List(2, 3, 4, 5)
    println(list.map(addOne))
    // 使用匿名函数
    //List(2, 3, 4, 5)
    println(list.map((x: Int) => x + 1))
    // 参数类型可以推断时，可以省略参数类型，省略Int类型
    //List(2, 3, 4, 5)
    println(list.map((x) => x + 1))
    // 当传入的函数，只有单个参数时，可以省去括号
    //List(2, 3, 4, 5)
    println(list.map(x => x + 1))
    // 如果变量只在=>右边只出现一次，可以用_来代替
    //List(2, 3, 4, 5)
    println(list.map(_ + 1))

    def sum(x: Int, y: Int) = {
      x + y
    }

    // 正常调用函数
    // 10
    println(list.reduce(sum))
    // 使用匿名函数
    // 10
    println(list.reduce((x: Int, y: Int) => x + y))
    // 参数类型可以推断时，可以省略参数类型，省略Int类型
    // 10
    println(list.reduce((x,y) => x + y))

    // 如果变量只在=>右边只出现一次，可以用_来代替
    // 10
    println(list.reduce(_ + _))

  }
}
